/**
 * 所有平台支付
 * 支付文档可参考: https://uniapp.dcloud.net.cn/api/plugins/payment.html#requestpayment
 */
import AppUtils from './index'
import uniApi from '../../uniApi'
import {
	prepay,
} from '@/api/user'

/**
 * 统一支付
 * @param options, 必传参数: payType(支付方式), payStr(加密的支付参数)
 * @returns {Promise<unknown>}
 * @constructor
 */
export function AppPay(options) {
	return new Promise(async (resolve, reject) => {
		const {
			payType,
			payorderId
		} = options
		let payStr = {}
		const data = await AppUtils.getProvider('payment')
		prepay({
				orderId: payorderId
			}, 'post')
			.then((res) => {
				if (res.errno == 0) {
					res.data.package = res.data.packageValue
					payStr = res.data
					// 异常参数处理
					if (!payStr) {
						uni.showToast({
							title: '拉起支付参数错误',
							icon: 'none'
						})
						return reject('拉起支付参数错误')
					}
					// 获取服务提供商

					// 支付参数
					const payParams = {
						provider: data[0],
						// orderInfo: payStr
					}
					if (payType === 'ALI_APP') {
						payParams.provider = 'alipay'
					}
					if (payType === 'WX_APP') {
						payParams.provider = 'wxpay'
						payParams.orderInfo = payStr
					}
					// 微信小程序支付参数需单独处理
					if (payType === 'WX_LITE') {
						const Wx_LITE_PAY_INFO = payStr
						for (const key in Wx_LITE_PAY_INFO) {
							payParams[key] = Wx_LITE_PAY_INFO[key]
						}
					}
					console.log(payParams);
					// 发起支付
					uni.requestPayment({
						...payParams,
						success: ({
							errMsg
						}) => {
							console.log(errMsg, 'errMsg');
							if (errMsg == 'requestPayment:ok') {
								uni.showToast({
									title: '支付成功',
									icon: 'none'
								})
								return resolve(true)
							}
						},
						fail: (err) => {
							console.log('fail:', err)
							uni.showToast({
								title: '支付失败',
								icon: 'none'
							})
							return reject(err)
						}
					})
				} else {
					uni.showToast({
						title: '失败',
						icon: 'none'
					})
				}

			})
	})
}